如何排查CPU占用过高以及常见的几种情况 |
您所在的位置:网站首页 › 数据库cpu过高 排查方法 › 如何排查CPU占用过高以及常见的几种情况 |
在最近上线过程中遇到cpu占用率过高问题 由于问题已解决,此时仅重现操作方法 1.先用top命令,找到cpu占用最高的进程 PID 如上图 2.再用ps -mp pid -o THREAD,tid,time 查询进程中,那个线程的cpu占用率高 记住TID 3.jstack 29099 >> xxx.log 打印出该进程下线程日志 4.sz xxx.log 将日志文件下载到本地 5.将查找到的 线程占用最高的 tid 上上上图中 29108 转成16进制 --- 71b4 6.打开下载好的 xxx.log 通过 查找方式 找到 对应线程 进行排查 ======================================================================= 容易出现cpu占用过高的几点 1.代码中写死循环时,一直占用cpu,如 如果加上线程睡眠时间,则释放cpu占用,不会一直抢占cpu 2.如上在循环中不停的创建对象,也会导致GC频繁 ---通过下图,不让死循环,频繁创建对象 3.System.currentTimeMillis() 采用这种方式去做计时,大概占用了10-20%cpu,因为不停的调用 解决方案: 采用一条线程来做计时 public class TimerThread extends Thread { public static volatile long TIMER = 0; public TimerThread() { setDaemon(true); } public void run() { while (true) { try { // ===计时每秒+1=== Thread.sleep(1000); TIMER++; } catch (InterruptedException e) { throw new RuntimeException(e); } } } }
https://blog.csdn.net/chenxiusheng/article/details/74007750 5.FullGC 问题,现阶段还没遇到,遇到了再补充.... |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |